package com.thp.bigdata.webLogWash;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import org.junit.Test;

/**
 * 日志的解析类
 * @author 汤小萌
 *
 */
public class WebLogParser {
	
	
	
	/**
	 * 1>	194.237.142.21
	   2>	-
	   3>	-
	   4>	[18/Sep/2013:06:49:18
	   5>	+0000]
	   6>	"GET
	   7>	/wp-content/uploads/2013/07/rstudio-git3.png
	   8>	HTTP/1.1"
	   9>	304
	   10>	0
	   11>	"-"
	   12>	"Mozilla/4.0
	   13>	(compatible;)"
	 */
	
	public static WebLogBean parser(String line) {
		WebLogBean webLogBean = new WebLogBean();
		String[] arr = line.split(" ");
		if(arr.length > 11) {
			webLogBean.setRemote_addr(arr[0]);
			webLogBean.setRemote_user(arr[1]);
			webLogBean.setTime_local(parseTime(arr[3].substring(1)));
			webLogBean.setRequest(arr[5]);
			webLogBean.setStatus(arr[8]);
			webLogBean.setBody_bytes_sent(arr[9]);
			webLogBean.setHttp_referer(arr[10]);
			if(arr.length > 12) {
				webLogBean.setHttp_user_agent(arr[11] + " " + arr[12]);
			} else {
				webLogBean.setHttp_user_agent(arr[11]);
			}
			// System.out.println(Integer.parseInt(webLogBean.getStatus()));
			// System.out.println( " 是否大于400 ： " + (Integer.parseInt(webLogBean.getStatus()) >= 400));
			if(Integer.parseInt(webLogBean.getStatus()) >= 400) { // 状态值 >=400 请求错误
				webLogBean.setValid(false);
			}
			// webLogBean.setValid(true);
			// System.out.println(webLogBean.isValid());
		} else {  // 数据长度  < 11 不合法
			webLogBean.setValid(false);
		}
		return webLogBean;
	}
	
	// 注意这个日期格式转换的方法
	static SimpleDateFormat sd1 = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss",Locale.US);
	static SimpleDateFormat sd2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	
	// 18/Sep/2013:06:49:18  解析时间
	public static String parseTime(String dt) {
		try {
			Date parse = sd1.parse(dt);
			return sd2.format(parse);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	
	
	public static void main(String[] args) {
		System.out.println(parseTime("18/Sep/2013:06:49:18"));
	}
	
	@Test
	public void test01() {
		String str = "194.237.142.21 - - [18/Sep/2013:06:49:18 +0000] \"GET /wp-content/uploads/2013/07/rstudio-git3.png HTTP/1.1\" 304 0 \"-\" \"Mozilla/4.0 (compatible;)\"";
		String[] fields = str.split(" ");
		for(String field : fields) {
			System.out.println(field);
		}
	}
	
	
	
}
